CentOS8 快速搭建 Gitlab 服务器

作者: 李多多 日期: 2021-11-29
CentOS | Git
CentOS8 快速搭建 Gitlab 服务器

@[TOC](CentOS8 快速搭建 Gitlab 服务器)

写在前面的话

很多 IT 人从业 多年也许都还没有亲自搭过一次 Gitlab 服务器,我就是其中之一!通常都是入职后,拿到上面给的 Git 地址把项目 clone 下来!然后日复一日的 crud 搬砖,直到离职。也许用了几百年 Git 了,但是从来没有亲自部署过 Gitlab 服务器!虽然现在社会分工越来越细,部署 Gitlab 服务器通常都是运维的兄弟去做了,但如果你去一家创业公司,很可能就要你来部署的!所以该走的路我们还是得走一下!

现在来正式从 “零” 开始搭建 Gitlab 服务器:
首先来看看Gitlab 和 Github 的区别,一句话来概括就是:

Gitlab 是给企业私有化部署的 Git 服务器;
Github 是互联网在线版的 Git 服务器!

  Github 对于开源项目建仓是免费使用的,那么 Gitlab 收不收费呢?分布式版本控制方面的功能 Gitlab 也是免费使用的,提供了社区版 (Gitlab CE) 给大家!Gitlab 现在可强大了,已经有自己成套的 DevOps 落地解决方案 (提高生产力的利器),但是这部分功能是在收费的旗舰版 / 企业版 (Gitlab EE) 上提供的!就像 Github 建私有化仓库的功能也是收费的一样,很正常!

  不啰嗦了,快速开始吧:
  
进入官网如下图,按箭头依次点击:
在这里插入图片描述
在这里插入图片描述
官方建议使用至少 4GB 的可用内存来运行 Gitlab,我们选用服务器时就要注意了,至少要 4GB 以上。点击CentOS 8 一直往下滑

在这里插入图片描述
在安装步骤的最后,有一个短短的链接,写着 “CE or EE“,似乎有个 CE 版的入口,点进去如下图:
在这里插入图片描述
新页面前面的好几段依然在讲使用旗舰版 (企业版 Gitlab EE) 有多少好处…. 直到最后才放了一个免费社区版 (Gitlab CE) 的链接 “Install GitLab Community Edition”,藏得这么深,这是怕别人知道啊!续继点进去:
在这里插入图片描述
继续点:
在这里插入图片描述
在这里插入图片描述
服务器准备好后,按着官方 Gitlab CE 版的安装说明进行安装即可,其实很简单,认真算起来只有三步 (由于我是 root 身份,所以不用 sudo):

第一步

安装和启用 policycoreutils、openssh-server 和 openssh-clients 组件,并将它们开放防火墙 (不要忘了 reload 防火墙):

dnf install -y curl policycoreutils openssh-server openssh-clients
# Enable OpenSSH server daemon if not enabled: sudo systemctl status sshd
systemctl enable sshd
systemctl start sshd

# Check if opening the firewall is needed with: sudo systemctl status firewalld
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
systemctl reload firewal

与邮件通知相关的 Postfix 组件其实可以暂时不用安装和配置,这个可以放到后面再来配置一个外部的 SMTP 服务器:

dnf install postfix
systemctl enable postfix
systemctl start postfix

第二步

使用 curl 工具下载并配置 Gitlab CE 版 RPM 安装包的仓库配置脚本 (请确认你的服务器网络通畅,注意这只是 RPM 安装包的仓库配置脚本,并不是真正的安装包)

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

第三步

安装 Gitlab CE 版并指定外部访问的 URL 地址,这里注意一下:外部访问 URL 地址使用一个自定义的域名,即使该域名实际上没有也没关系!另外如果你的服务器没有 https 相关的证书,那就不要用 https,直接用 http 协议!客户端使用时你可以在 HOST 里做一下映射的,当然,有真实可以的域名就最好了!为什么要用域名来指定外部访问 URL 地址呢?因为后面你使用 Gitlab 时会发现这是一个明智的选择!

EXTERNAL_URL="https://gitlab.example.com" dnf install -y gitlab-ce

到这里你会发现要从第二步中配置的国外站下载多达 700M 的 gitlab-ce 包是有多么的艰难,预计耗时估计要 10 几个钟,如果没有科学上网的话还是要采用别的方法!

蜗牛速度是无法忍受的,Ctrl+C 掐断下载过程吧,换其它方法:

  1. 自己先从其他地方下载到 gitlab-ce 的 rmp 包,再上传到服务器进行安装;
  2. 使用一个国内镜像地址进行在线安装;

  这里我们讲一下第二种办法,使用国内镜像地址进行在线安装,这里我们选择清华大学提供的镜像服务器,因为它提供了比较全面的使用说明 ( https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/),现在我们按说明来安装一下 Gitlab CE 版 (以下步骤是从承接上面的第二步开始的):

新的第二步

  
使用 vi 或 vim 新建并编辑 yum 源配置文件 /etc/yum.repos.d/gitlab-ce.repo

# vim /etc/yum.repos.d/gitlab-ce.repo

填入以下 yum 源配置信息:

[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

新的第三步

使用 yum 包管理器安装 Gitlab CE 版

# yum makecache
# yum -y install gitlab-ce

在 “新的第三步” 里比原来的第三步少了个东西,啥东西呢?细心的同学肯定发现了,没有配置 Gitlab 服务器的外部访问地址 ( EXTERNAL_URL)!不要急,等待 Gitlab 装完后我们再去配一下就好了!国内镜像还是比较快的,几分钟就下载并装好!

在这里插入图片描述
好了,现在该来补上 “新的第三步” 里缺失的 Gitlab 服务器的外部访问地址 (EXTERNAL_URL),在哪里配置呢?熟悉 Linux 服务器各目录作的人应该都能猜到:Gitlab 这么全球通用的版本控制软件,配置文件应该会也按照 Linux 约定放在 /etc 目录中吧!使用 cd 到 /etc 目录看一看或用 ls /etc/gitl 再 tab 一下就知道了!

# ls /etc/gitlab/
gitlab.rb

果然是有一个 Gitlab 的配置文件!使用 cat 命令查看一下发现内容不是一般的多,眼睛都会看瞎!那么我们用 grep 命令先过滤出包含外部访问地址 (EXTERNAL_URL) 配置内容先:

# grep -i 'EXTERNAL_URL' /etc/gitlab/gitlab.rb 
##! For more details on configuring external_url see:
##! EXTERNAL_URL will be used to populate/replace this value.
external_url 'http://gitlab.example.com'
# registry_external_url 'https://registry.example.com'
# pages_external_url "http://pages.example.com/"
# gitlab_pages['artifacts_server_url'] = nil # Defaults to external_url + '/api/v4'
# gitlab_pages['auth_redirect_uri'] = nil # Defaults to projects subdomain of pages_external_url and + '/auth'
# gitlab_pages['gitlab_server'] = nil # Defaults to external_url
# mattermost_external_url 'http://mattermost.example.com'
# When the registry is automatically enabled using the same domain as `external_url`,
# For example, if external_url is the same for two secondaries, you must specify
# If it is blank, it defaults to external_url.

现在确认与外部访问地址 (EXTERNAL_URL) 相关的内容就这么多,动手前先用 cp 命令备份一下 /etc/gitlab/gitlab.rb 文件,因为后面我们要做字符串直接替换这种高险操作!有备无患!

# cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.bak
# ls /etc/gitlab/
gitlab.rb gitlab.rb.bak

现在使用 sed 命令替换 /etc/gitlab/gitlab.rb 文件中的 http://gitlab.example.comhttp://gitlab.xxxxx.com ,xxxxx为你的域名。

sed 命令字符串替换格式: sed -i “s$ 要查找的字段 $ 替换成的字段 & g” 文件名 ,-i 表示是 in place edit 的意思,即就地编辑更改;参数里开头的 s 是 search 的意思,可以换成 d 表示 delete,最后的 g 是 globa 的意思,即全文搜索;

# sed -i "s#http://gitlab.example.com#http://gitlab.xgclassroom.com#g" /etc/gitlab/gitlab.rb

完了后,我们再用 grep 命令先筛选一下与外部访问地址 (EXTERNAL_URL) 相关的内容:

# grep -i 'EXTERNAL_URL' gitlab.rb 
##! For more details on configuring external_url see:
##! EXTERNAL_URL will be used to populate/replace this value.
external_url 'http://gitlab.xxxxxx.com'
# registry_external_url 'https://registry.example.com'
# pages_external_url "http://pages.example.com/"
# gitlab_pages['artifacts_server_url'] = nil # Defaults to external_url + '/api/v4'
# gitlab_pages['auth_redirect_uri'] = nil # Defaults to projects subdomain of pages_external_url and + '/auth'
# gitlab_pages['gitlab_server'] = nil # Defaults to external_url
# mattermost_external_url 'http://mattermost.example.com'
# When the registry is automatically enabled using the same domain as `external_url`,
# For example, if external_url is the same for two secondaries, you must specify
# If it is blank, it defaults to external_url.

使用 gitlab-ctl 工具根据修改后的配置文件重新配置 gitlab 服务实例使配置生效:

# gitlab-ctl reconfigure

还有其他一些常用命令如下

查看状态:

gitlab-ctl status

启动服务:

gitlab-ctl start

重启服务:

gitlab-ctl restart 

停止服务:

gitlab-ctl stop

列出所有服务:

gitlab-ctl service-list

最后从虚拟机的宿主机浏览器上用 IP 地址或域名 (用域名的话需要先在宿主机的 /etc/hosts 配置域名与 IP 地址映射,所以实际上还是 IP) 访问一下 gitlab 服务:
在这里插入图片描述
访问成功如下图 ,密码在 /etc/gitlab/initial_root_password 文件中,登陆后可修改:

在这里插入图片描述

附加

语言改成中文:
进入 Preference,翻到最后,找到 Language,设置简体中文并保存。

在这里插入图片描述